接着上篇唠!Google Guava 配合 List分页工具类进行接口优化改造。

接上篇,你可以在项目初始化或者通过定时任务把从MySQL查询出来的几乎不会改变的大量的数据放到Cache中, 然后配合工具类进行模拟MySQL的分页查询,速度比MySQL快很多

不废话贴代码


/**
 * @author bo bo
 * @date 2019/12/16 9:23
 * @desc list集合工具类
 */
public class ListPagerUtils {
    /**
     * @param pageSize  当前页面大小
     * @param pageIndex 当前页码
     * @param list      需要分页的集合
     * @return
     */
    public static List Pager( int pageIndex, int pageSize, List list) {
        //使用list 中的sublist方法分页
        List<T> dataList = null;
        // 每页显示多少条记录

        int currentPage; //当前第几页数据

        int totalRecord = list.size(); // 一共多少条记录

        int totalPage = totalRecord % pageSize; // 一共多少页
        if (totalPage > 0) {
            totalPage = totalRecord / pageSize + 1;
        } else {
            totalPage = totalRecord / pageSize;
        }

        System.out.println("总页数:" + totalPage);

        // 当前第几页数据
        currentPage = totalPage < pageIndex ? totalPage : pageIndex;

        // 起始索引
        int fromIndex = pageSize * (currentPage - 1);

        // 结束索引
        int toIndex = pageSize * currentPage > totalRecord ? totalRecord : pageSize * currentPage;
        try {
            dataList = list.subList(fromIndex, toIndex);
        } catch (IndexOutOfBoundsException e) {
            e.printStackTrace();
        }
        return dataList;
    }
}

实际优化的业务部分代码

	//今天的订单
        if (type.equals("1")) {
            Object cacheOrder = GuavaCacheUtil.get("todayWecharOrder");
            if (cacheOrder != null) {
                List<WecharOrderVo> orderList = (List<WecharOrderVo>) cacheOrder;
                for (WecharOrderVo order : orderList) {
                    if (order.getTenantId().equals(map.get("tenantId"))) {
                        neworderList.add(order);
                    }
                }
                List pagerList = ListPagerUtils.Pager(format.getIndex(), format.getLimit(), neworderList);
                respMap.put("orderList", pagerList);
                respMap.put("count", neworderList.size());
            }
        }

最后来个结果图,效果还不错,几乎速度都是在50ms左右

优化前:线上版本

image.png

优化后:没分页

image.png

优化后:有分页

image.png

当然这可能不是最优优化。也希望你能给我你的建议,一起交流学习

欢迎添加我的微信

image.png